package com.sl.controller;

import com.alibaba.fastjson.JSONObject;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import com.sl.entity.Result;
import com.sl.entity.StatusCode;
import com.sl.util.ValidateCodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author: 腾信手机短信发送接收平台
 * @date: 2020/3/6
 */
@Slf4j
@RestController
@RequestMapping("/message")
public class TencentMessage {

    /**
     * 短信应用 SDK AppID  以1400开头  : 应用管理：列表
     */
     int appid = 1400328609;
    /**
     * 短信应用 SDK AppKey
     */
    String appkey = "6086772f043aa70f7eba193a68a44b6c";
    // 短信模板 ID，需要在短信应用中申请    国内短信：短信内容配置
    // NOTE: 这里的模板 ID`只是示例，真实的模板 ID 需要在短信控制台中申请
       int templateId = 551448;
    // NOTE: 签名参数使用的是`签名内容`，而不是`签名ID`。这里的签名"腾讯云"只是示例，真实的签名需要在短信控制台申请
    String smsSign = "霜林科技";
    //效果：【霜林科技】您的验证码为：5678，打死不要告诉其他人。
    @PostMapping
    public Result messageTencent(@RequestBody String data, HttpServletRequest request){
        log.info("腾讯发送信息>>>>" + data);
        JSONObject jsonObject = JSONObject.parseObject(data);
        String telephone = jsonObject.getString("telephone");
        log.info("telephone>>>>" + telephone);
        // 生成短信验证码
       Integer code = ValidateCodeUtils.generateValidateCode(4);
        log.info("腾讯发送的手机验证码为："+code);
        // 需要发送短信的手机号码
        String[] phoneNumbers = {telephone};
        try {
            //数组元素个数，和模板中的 变量个数一致。一般一个
            String[] params = {code.toString()};
            SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumbers[0],
                    templateId, params, smsSign, "", "");
            HttpSession session= request.getSession();
            session.setAttribute("telephoneCode",code);
            session.setMaxInactiveInterval(5*60);
            System.out.println("result>>>>" + result);

        } catch (HTTPException e) {
            // HTTP 响应码错误
            e.printStackTrace();
            return new Result(false, StatusCode.ERROR,"腾讯验证码发送失败");
        } catch (JSONException e) {
            // JSON 解析错误
            e.printStackTrace();
            return new Result(false, StatusCode.ERROR,"腾讯验证码发送失败");
        } catch (IOException e) {
            // 网络 IO 错误
            e.printStackTrace();
            return new Result(false, StatusCode.ERROR,"腾讯验证码发送失败");
        }
        return new Result(true, StatusCode.OK,"腾讯验证码发送成功");
    }



}
